package top.hmtools.mapper.plus.mysql.select;

import org.apache.ibatis.mapping.MappedStatement;

import tk.mybatis.mapper.mapperhelper.MapperHelper;
import top.hmtools.mapper.plus.mysql.BaseMysql;

/**
 * 通用mapper扩展方法具体实现
 * <br>查
 * @author HyboJ
 *
 */
public class SelectMapperPlusProvider extends BaseMysql {
	

	public SelectMapperPlusProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
		super(mapperClass, mapperHelper);
	}
	
	
	/**
	 * 获取所有数据
	 * @param ms
	 * @return
	 */
	public String getAll(MappedStatement ms){
		final Class<?> entityClass = getEntityClass(ms);
        //修改返回值类型为实体类型
        setResultType(ms, entityClass);
      //组装查询mybatis sql 脚本模板
        return this.mergeToSQLstr(entityClass, "select/getAll");
	}
	
	/**
	 * 指定主键名称（Java类字段名字符串），主键值，获取对应的一条数据
	 * @param ms
	 * @return
	 */
	public String getOneByPk(MappedStatement ms){
		final Class<?> entityClass = getEntityClass(ms);
        //修改返回值类型为实体类型
        setResultType(ms, entityClass);
        return this.mergeToSQLstr(entityClass, "select/getOneByPk");
	}
	

	

	/**
	 * 指定主键名称（Java类字段名字符串），主键集合，获取指定记录集合
	 * @param ms
	 * @return
	 */
	public String getSomeByPk(MappedStatement ms){
		final Class<?> entityClass = getEntityClass(ms);
        //修改返回值类型为实体类型
        setResultType(ms, entityClass);
        return this.mergeToSQLstr(entityClass, "select/getSomeByPk");
	}
	
	/**
	 * 指定主键名称（Java类字段名字符串），主键集合，获取指定记录总数。入参为空，会返回所有数据
	 * @param ms
	 * @return
	 */
	public String getCountByPk (MappedStatement ms){
		final Class<?> entityClass = getEntityClass(ms);
		return this.mergeToSQLstr(entityClass, "select/getCountByPk");
	}

	/**
	 * 根据条件获取对应数据
	 * <br>为能够结合pagehelper分页插件使用，本方法输出的SQL语句不含“limit”
	 * @param ms
	 * @return
	 */
	public String getSomeByCondition (MappedStatement ms){
		Class<?> entityClass = getEntityClass(ms);
        //修改返回值类型为实体类型
        setResultType(ms, entityClass);
        return this.mergeToSQLstr(entityClass, "select/getSomeByCondition");
	}
	
	/**
	 * 根据条件获取对应数据总数
	 * @param ms
	 * @return
	 */
	public String getCountByCondition (MappedStatement ms){
		Class<?> entityClass = getEntityClass(ms);
		return this.mergeToSQLstr(entityClass, "select/getCountByCondition");
	}

	/**
	 * 根据指定的主键名称、主键集合，获取数据库中存在的主键集合数据
	 * <br>为能够结合pagehelper分页插件使用，本方法输出的SQL语句不含“limit”
	 * @param ms
	 * @return
	 */
	public String getExistPksByPk (MappedStatement ms){
		Class<?> entityClass = getEntityClass(ms);
		return this.mergeToSQLstr(entityClass, "select/getExistPksByPk");
	}
	
	/**
	 * 根据指定的主键名称、主键集合，获取数据库中存在的主键集合数据总数
	 * @param ms
	 * @return
	 */
	public String getExistPksCountByPk (MappedStatement ms){
		Class<?> entityClass = getEntityClass(ms);
		return this.mergeToSQLstr(entityClass, "select/getExistPksCountByPk");
	}
	
	/**
	 * 根据条件，且可以指定一个字段使用范围条件获取对应数据集合
	 * @param ms
	 * @return
	 */
	public String getSomeByConditionAndRange (MappedStatement ms){
		Class<?> entityClass = getEntityClass(ms);
		//修改返回值类型为实体类型
        setResultType(ms, entityClass);
		return this.mergeToSQLstr(entityClass, "select/getSomeByConditionAndRange");
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
